package br.com.dataphonebr;

import java.text.ParseException;
import java.util.Date;

import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.RadioButton;
import android.widget.RatingBar;
import android.widget.Spinner;
import br.com.dataphonebr.dao.impl.GrupoDao;
import br.com.dataphonebr.entity.Atividade;
import br.com.dataphonebr.entity.Grupo;
import br.com.dataphonebr.enumerator.Alerta;
import br.com.dataphonebr.enumerator.NotificacaoMensal;
import br.com.dataphonebr.enumerator.PeriodoNotificacao;
import br.com.dataphonebr.enumerator.Prioridade;
import br.com.dataphonebr.enumerator.StatusAtividade;
import br.com.dataphonebr.selectListener.AlertaSelectedListener;
import br.com.dataphonebr.selectListener.DatePickerFragment;
import br.com.dataphonebr.selectListener.DatePickerFragment.TypeDatePicker;
import br.com.dataphonebr.selectListener.GrupoSelectedListener;
import br.com.dataphonebr.selectListener.NotificacaoMensalSelectedListener;
import br.com.dataphonebr.selectListener.PeriodoNotificacaoSelectedListener;
import br.com.dataphonebr.service.AtividadeService;
import br.com.dataphonebr.util.Util;

public class AppointmentActivity extends GenericActivity<Atividade>{
	
	private EditText titulo;
	private Spinner grupo;
	private EditText dataVencimento; 
	private EditText dataInicio; 
	private EditText horaInicio; 
	private EditText dataFim; 
	private EditText horaFim; 
	private Button btnDataVencimento;
	private Button btnDataInicio;
	private Button btnDataFim;
	private Button btnHoraInicio;
	private Button btnHoraFim;
	private Spinner repeticao;
	private Spinner alerta;
	private EditText observacao;
	private CheckBox renovarAutomatico;
	private CheckBox notificarSms;
	private CheckBox notificarEmail;
	private CheckBox publico;
	private CheckBox segunda;
	private CheckBox terca;
	private CheckBox quarta;
	private CheckBox quinta;
	private CheckBox sexta;
	private CheckBox sabado;
	private CheckBox domingo;
	private RadioButton alarme;
	private RadioButton notificacao;
	private RatingBar prioridade;
	private Spinner tipoRepeticao;
	private LinearLayout vencimentoGrupoLabel;
	private LinearLayout vencimentoGrupo;
	private LinearLayout semanaGrupo1;
	private LinearLayout semanaGrupo2;
	private LinearLayout semanaGrupo3;
	private LinearLayout semanaGrupo4;
	private AtividadeService atividadeService;
	private GrupoDao grupoDao = new GrupoDao(this);
	private GrupoSelectedListener grupoListener = new GrupoSelectedListener(this);
	private NotificacaoMensalSelectedListener notificacaoMensalListener = new NotificacaoMensalSelectedListener(this);
	private AlertaSelectedListener alertaListener = new AlertaSelectedListener(this);
	private PeriodoNotificacaoSelectedListener periodoNotificacaoListener = new PeriodoNotificacaoSelectedListener(this);
	
	public AppointmentActivity() {
		super(Atividade.class);
	}

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_appointment);
		getActionBar().setDisplayHomeAsUpEnabled(true);
		this.init();
	}
	
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		MenuInflater inflater = getMenuInflater();
	    inflater.inflate(R.menu.appointment, menu);
	    return true;
	} 	
	
	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
//		MenuItem saveAppointmentMenu = menu.findItem(R.id.saveAppointmentMenu);
//		if (!getEnabled()){
//			saveAppointmentMenu.setEnabled(false);
//		} else
//			saveAppointmentMenu.setEnabled(true);
		return super.onPrepareOptionsMenu(menu);
	}
	
	@Override
	public boolean onOptionsItemSelected(MenuItem item) {
		switch (item.getItemId()) {
	    case R.id.saveAppointmentMenu:
	    	saveOrUpdate(item.getActionView());
	        return true;
	    case R.id.cancelAppointmentMenu:
	    	onBack();
			return true;
	    case android.R.id.home:
	    	onBack();
	    	return true;
	    default:
	        return super.onOptionsItemSelected(item);
	    }
	}
	
	private void onBack(){
    	Integer from = getIntent().getExtras().getInt(Util.COMING_FROM);
    	if (from != null && from > 0){
    		int toAdm = R.layout.activity_administrator_list;
    		if (toAdm == from){
    			openView(AppointmentActivity.this, AdministratorListActivity.class, true);
    			return;
    		}

    		int toDash = R.layout.activity_dashboard;
    		if (toDash == from){
    			openView(AppointmentActivity.this, DashboardActivity.class, true);
    			return;
    		}

    		int toSearch = R.layout.activity_search_adm;
    		if (toSearch == from){
    			openView(AppointmentActivity.this, SearchAdmActivity.class, true);
    			return;
    		}
    	}
   		openView(AppointmentActivity.this, AdministratorListActivity.class, true);
	}
	
	@Override
	public void init(){
		atividadeService = new AtividadeService(this);
		setServiceInstance(atividadeService);
		super.init();
	}
	
	@Override
	public Atividade loadInstance() {
		Atividade atividade = super.loadInstance();
		titulo.setText(atividade.getTitulo());
		grupo.setSelection(grupoListener.getSelectedItem(atividade.getGrupo()));
		dataVencimento.setText(atividade.getDataVencimento()!=null?util.dateToString(atividade.getDataVencimento()):null); 
		dataInicio.setText(atividade.getDataIni()!=null?util.dateToString(atividade.getDataIni()):null); 
		horaInicio.setText(atividade.getHoraIni()!=null?util.timeToString(atividade.getHoraIni()):null); 
		dataFim.setText(atividade.getDataFim()!=null?util.dateToString(atividade.getDataFim()):null);
		horaFim.setText(atividade.getHoraFim()!=null?util.timeToString(atividade.getHoraFim()):null); 
		repeticao.setSelection(atividade.getPeriodoNotificacao()!=null?atividade.getPeriodoNotificacao().ordinal():0);
		alerta.setSelection(atividade.getTipoAlerta()!=null?atividade.getTipoAlerta().ordinal():0);
		observacao.setText(atividade.getDescricao());
		tipoRepeticao.setSelection(atividade.getNotificacaoMensal()!=null?atividade.getNotificacaoMensal().ordinal():0);
		notificarSms.setChecked(util.getBoolValue(atividade.getEnviaSMS()));
		notificarEmail.setChecked(util.getBoolValue(atividade.getEnviaEmail()));
		if (publico != null)
			publico.setChecked(util.getBoolValue(atividade.getPublico()));
		if (atividade.getRenovarAutomaticamente() == null)
			atividade.setRenovarAutomaticamente(false);
		renovarAutomatico.setChecked(util.getBoolValue(atividade.getRenovarAutomaticamente()));
		segunda.setChecked(util.getBoolValue(atividade.getSegunda()));;
		terca.setChecked(util.getBoolValue(atividade.getTerca()));;
		quarta.setChecked(util.getBoolValue(atividade.getQuarta()));;
		quinta.setChecked(util.getBoolValue(atividade.getQuinta()));;
		sexta.setChecked(util.getBoolValue(atividade.getSexta()));;
		sabado.setChecked(util.getBoolValue(atividade.getSabado()));;
		domingo.setChecked(util.getBoolValue(atividade.getDomingo()));;
		prioridade.setProgress(atividade.getPrioridade()!=null?atividade.getPrioridade().ordinal():0);
		if (atividade.getTipoNotificacaoAlarme() == null)
			atividade.setTipoNotificacaoAlarme(false);
		else {
			if (atividade.getTipoNotificacaoAlarme()){
				alarme.setChecked(true);
				notificacao.setChecked(false);
			} else {
				alarme.setChecked(false);
				notificacao.setChecked(true);
			}
		}
		prepareToDisplay();
		return atividade;
	}
	
	public void prepareToDisplay(){
		
		btnDataVencimento.setEnabled(getEnabled());
		btnDataInicio.setEnabled(getEnabled());
		btnDataFim.setEnabled(getEnabled());
		btnHoraInicio.setEnabled(getEnabled());
		btnHoraFim.setEnabled(getEnabled());
		titulo.setEnabled(getEnabled());
		titulo.setFocusable(getEnabled());
		grupo.setEnabled(getEnabled());
		repeticao.setEnabled(getEnabled());
		alerta.setEnabled(getEnabled());
		observacao.setEnabled(getEnabled());
		observacao.setFocusable(getEnabled());
		tipoRepeticao.setEnabled(getEnabled());
		notificarSms.setEnabled(getEnabled());
		notificarEmail.setEnabled(getEnabled());
		publico.setEnabled(getEnabled());
		renovarAutomatico.setEnabled(getEnabled());
		segunda.setEnabled(getEnabled());
		terca.setEnabled(getEnabled());
		quarta.setEnabled(getEnabled());
		quinta.setEnabled(getEnabled());
		sexta.setEnabled(getEnabled());
		sabado.setEnabled(getEnabled());
		domingo.setEnabled(getEnabled());
		prioridade.setEnabled(getEnabled());
		alarme.setEnabled(getEnabled());
		notificacao.setEnabled(getEnabled());
	}
	
	@Override
	public void afterPersist() {
		openView(AppointmentActivity.this, AdministratorListActivity.class, true);
		super.afterPersist();
	}
	
	@Override
	public void afterUpdate() {
		openView(AppointmentActivity.this, AdministratorListActivity.class, true);
		super.afterUpdate();
	}
	
	@Override
	public void prepareComponents(){
		titulo = (EditText)findViewById(R.id.editTituloId);
		editHidden(titulo);
		grupo =  (Spinner) findViewById(R.id.categoriaSpinnerAtivId);
		dataVencimento = (EditText) findViewById(R.id.dataVencimentoEditId);
		dataInicio = (EditText) findViewById(R.id.dataIniEditId);
		horaInicio = (EditText) findViewById(R.id.horaIniEditId);
		dataFim = (EditText) findViewById(R.id.dataFimEditId);
		horaFim = (EditText) findViewById(R.id.horaFimEditId);
		btnDataVencimento = (Button) findViewById(R.id.dataVencimentoPickerBtn);
		btnDataVencimento.setOnClickListener(myClick);
		btnDataInicio = (Button) findViewById(R.id.dataIniPicketBtn);
		if (btnDataInicio != null && dataInicio != null){
			btnDataInicio.setHeight(dataInicio.getHeight());
			btnDataInicio.setOnClickListener(myClick);
		}
		btnDataFim = (Button) findViewById(R.id.dataFimPicketBtn);
		if (btnDataFim!= null && dataFim != null){
			btnDataFim.setHeight(dataFim.getHeight());
			btnDataFim.setOnClickListener(myClick);
		}
		btnHoraInicio = (Button) findViewById(R.id.horaIniPicketBtn);
		if (btnHoraInicio!= null && horaInicio != null){
			btnHoraInicio.setHeight(horaInicio.getHeight());
			btnHoraInicio.setOnClickListener(myClick);
		}
		btnHoraFim = (Button) findViewById(R.id.horaFimPicketBtn);
		if (btnHoraFim!= null && horaFim != null){
			btnHoraFim.setHeight(horaFim.getHeight());
			btnHoraFim.setOnClickListener(myClick);
		}
		repeticao =  (Spinner) findViewById(R.id.repetirSpinnerId);
		repeticao.setOnItemSelectedListener(repeticaoClick);
		segunda = (CheckBox) findViewById(R.id.segundaCheckboxId);
		terca = (CheckBox) findViewById(R.id.tercaCheckboxId);
		quarta = (CheckBox) findViewById(R.id.quartaCheckboxId);
		quinta = (CheckBox) findViewById(R.id.quintaCheckboxId);
		sexta = (CheckBox) findViewById(R.id.sextaCheckboxId);
		sabado = (CheckBox) findViewById(R.id.sabadoCheckboxId);
		domingo = (CheckBox) findViewById(R.id.domingoCheckboxId);
		alarme = (RadioButton) findViewById(R.id.alarmeRadioButtonId);
		notificacao = (RadioButton) findViewById(R.id.notificacaoRadioButtonId);
		tipoRepeticao =  (Spinner) findViewById(R.id.tipoRepeticaoSpinnerId);
		tipoRepeticao.setOnItemSelectedListener(tipoRepeticaoClick);
		alerta =  (Spinner) findViewById(R.id.alertaSpinnerId);
		observacao = (EditText) findViewById(R.id.observacoesEditId);
		notificarSms = (CheckBox) findViewById(R.id.enviarSmsCheckboxId);
		notificarEmail = (CheckBox) findViewById(R.id.enviarEmailCheckBoxId);
		publico = (CheckBox) findViewById(R.id.publicoCheckBoxId);
		publico.setVisibility(View.GONE);
		renovarAutomatico = (CheckBox) findViewById(R.id.renovarAutoCheckBoxId);
		renovarAutomatico.setVisibility(View.GONE);
		prioridade = (RatingBar) findViewById(R.id.prioridadeRatingBarId);
		vencimentoGrupo = (LinearLayout)findViewById(R.id.vencimentoLayoutAppointId);
		vencimentoGrupoLabel = (LinearLayout)findViewById(R.id.vencimentoLayoutLabelAppointId);
		semanaGrupo1 = (LinearLayout)findViewById(R.id.weekdaysPanel1Id);
		semanaGrupo2 = (LinearLayout)findViewById(R.id.weekdaysPanel2Id);
		semanaGrupo3 = (LinearLayout)findViewById(R.id.weekdaysPanel3Id);
		semanaGrupo4 = (LinearLayout)findViewById(R.id.weekdaysPanel4Id);
	}
	
	@Override
	public void prepareList(){
		grupoListener.createAdapter(grupoDao.selectAll(), grupo);
		notificacaoMensalListener.createAdapter(NotificacaoMensal.values(), tipoRepeticao);
		periodoNotificacaoListener.createAdapter(PeriodoNotificacao.values(), repeticao);
		alertaListener.createAdapter(Alerta.values(), alerta);
	}
	
	@Override
	public void prepareToPersist() {
		if (getId() != null && getId() > 0)
			getInstance().setCodigo(getId());
		else
			getInstance().setCodigo(null);
		Grupo grupo = new Grupo();
		grupo = (Grupo)this.grupo.getSelectedItem();
		getInstance().setGrupo(grupo);
		getInstance().setUsuario(credentialsService.getUsuarioLogado());
		getInstance().setTitulo(titulo.getText().toString());
		getInstance().setDescricao(observacao.getText().toString());
		try {
			getInstance().setDataVencimento(util.stringToDate(dataVencimento.getText().toString()));
			getInstance().setDataIni(util.stringToDate(dataInicio.getText().toString()));
			getInstance().setDataFim((util.stringToDate(dataFim.getText().toString())));
			getInstance().setHoraIni((util.stringToTime(horaInicio.getText().toString())));
			getInstance().setHoraFim((util.stringToTime(horaFim.getText().toString())));
		} catch (ParseException e) {
		e.printStackTrace();
		}
		getInstance().setEnviaSMS(notificarSms.isChecked());
		getInstance().setEnviaEmail(notificarSms.isChecked());
		getInstance().setPublico(publico!=null?publico.isChecked():false);
		getInstance().setRenovarAutomaticamente(renovarAutomatico!=null?renovarAutomatico.isChecked():false);
		getInstance().setPeriodoNotificacao(PeriodoNotificacao.getPeriodoNotificacaoByIndex(repeticao.getSelectedItemPosition()));
		if (getInstance().getPeriodoNotificacao() != null){
			if (!getInstance().getPeriodoNotificacao().equals(PeriodoNotificacao.NENHUM)){
				if (getInstance().getPeriodoNotificacao().equals(PeriodoNotificacao.POR_DIA)){
					getInstance().setSegunda(segunda!=null?segunda.isChecked():null);
					getInstance().setTerca(terca!=null?terca.isChecked():null);
					getInstance().setQuarta(quarta!=null?quarta.isChecked():null);
					getInstance().setQuinta(quinta!=null?quinta.isChecked():null);
					getInstance().setSexta(sexta!=null?sexta.isChecked():null);
					getInstance().setSabado(sabado!=null?sabado.isChecked():null);
					getInstance().setDomingo(domingo!=null?domingo.isChecked():null);
				} 
				
				if (getInstance().getPeriodoNotificacao().equals(PeriodoNotificacao.DUAS_SEMANAS)){
					getInstance().setNotificacaoMensal(NotificacaoMensal.CONCLUSAO);
				} else {				
					if (tipoRepeticao != null)
						getInstance().setNotificacaoMensal(NotificacaoMensal.getNotificacaoMensalByIndex(tipoRepeticao.getSelectedItemPosition()));
					else
						getInstance().setNotificacaoMensal(null);
				}
			}
		}
		getInstance().setTipoAlerta(Alerta.getAlertaByIndex(alerta.getSelectedItemPosition()));
		getInstance().setStatus(StatusAtividade.EM_ABERTO);
		getInstance().setPrioridade(Prioridade.getPrioridadeByIndex(prioridade.getProgress()));
		getInstance().setTipoNotificacaoAlarme(false);
		if (alarme != null && alarme.isChecked())
			getInstance().setTipoNotificacaoAlarme(true);
		if (getInstance().getCodigo() == null || getInstance().getCodigo() == 0)
			getInstance().setPai(null);
	}
	
	public boolean validatePersist(Atividade instance) {
		if (!super.validatePersist(instance)){
			return false;
		}
		if (instance.getHoraIni() != null){
			if (instance.getDataIni() == null){
				instance.setDataIni(new Date());
			}
			atividadeService.processarAlerta(instance);
			if (atividadeService.existeAtividadeEmAberto(instance, instance.getDataIni())){
				util.showToastMessageLong(getString(R.string.msg_validate_duplicate_date_time, util.dateToString(instance.getDataIni())), this);
				return false;
			}
			if (instance.getTipoAlerta().equals(Alerta.UM_DIA) || instance.getTipoAlerta().equals(Alerta.DOIS_DIAS) || instance.getTipoAlerta().equals(Alerta.TRES_DIAS)){
				if (atividadeService.existeAtividadeEmAberto(instance, instance.getDataAviso())){
					util.showToastMessageLong(getString(R.string.msg_validate_duplicate_alarm, util.dateToString(instance.getDataAviso())), this);
					return false;
				}
			}
			
			if (getInstance().getPeriodoNotificacao() != null && !getInstance().getPeriodoNotificacao().equals(PeriodoNotificacao.NENHUM)){
				if (getInstance().getDataIni() != null && getInstance().getDataFim() != null){
					long days = util.diffInDays(getInstance().getDataIni(), getInstance().getDataFim());
					if (getInstance().getPeriodoNotificacao().equals(PeriodoNotificacao.POR_DIA) && days <= 7){
						util.showToastMessageLong(getString(R.string.msg_validate_dates_frequency, 7), this);
						return false;
					}

					if (getInstance().getPeriodoNotificacao().equals(PeriodoNotificacao.POR_MES) && days <= 30){
						util.showToastMessageLong(getString(R.string.msg_validate_dates_frequency, 30), this);
						return false;
					}

					if (getInstance().getPeriodoNotificacao().equals(PeriodoNotificacao.BIMESTRAL) && days <= 60){
						util.showToastMessageLong(getString(R.string.msg_validate_dates_frequency, 60), this);
						return false;
					}

					if (getInstance().getPeriodoNotificacao().equals(PeriodoNotificacao.TRIMESTRAL) && days <= 90){
						util.showToastMessageLong(getString(R.string.msg_validate_dates_frequency, 90), this);
						return false;
					}

					if (getInstance().getPeriodoNotificacao().equals(PeriodoNotificacao.SEMESTRAL) && days <= 180){
						util.showToastMessageLong(getString(R.string.msg_validate_dates_frequency, 180), this);
						return false;
					}

					if (getInstance().getPeriodoNotificacao().equals(PeriodoNotificacao.ANUAL) && days <= 365){
						util.showToastMessageLong(getString(R.string.msg_validate_dates_frequency, 365), this);
						return false;
					}
				}
			}
		}
		return true;
	};
	
	public boolean validateUpdate(Atividade instance) {
		return this.validatePersist(instance);
	};
	
	View.OnClickListener myClick = new View.OnClickListener() {
		DatePickerFragment datePicker = new DatePickerFragment(AppointmentActivity.this);
	    public void onClick(View v) {
	    	switch (v.getId()){
		    	case R.id.dataIniPicketBtn : {
		    		datePicker.setType(TypeDatePicker.DATE);
		    		datePicker.setField(dataInicio);
		    		datePicker.showDatePickerDialog(getFragmentManager());
		    	}
		    	break;
		    	case R.id.horaIniPicketBtn : {
		    		datePicker.setType(TypeDatePicker.TIME);
		    		datePicker.setField(horaInicio);
		    		datePicker.showTimePickerDialog(getFragmentManager());
		    	}
		    	break;
		    	case R.id.dataVencimentoPickerBtn : {
		    		datePicker.setType(TypeDatePicker.DATE);
		    		datePicker.setField(dataVencimento);
		    		datePicker.showDatePickerDialog(getFragmentManager());
		    	}
		    	break;
		    	case R.id.dataFimPicketBtn : {
		    		datePicker.setType(TypeDatePicker.DATE);
		    		datePicker.setField(dataFim);
		    		datePicker.showDatePickerDialog(getFragmentManager());
		    	}
		    	break;
		    	case R.id.horaFimPicketBtn : {
		    		datePicker.setType(TypeDatePicker.TIME);
		    		datePicker.setField(horaFim);
		    		datePicker.showTimePickerDialog(getFragmentManager());
		    	}
		    	break;
	    	}
	    }
	  };

	  AdapterView.OnItemSelectedListener repeticaoClick = new AdapterView.OnItemSelectedListener() {
		@Override
		public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
			PeriodoNotificacao periodo = (PeriodoNotificacao) parent.getItemAtPosition(pos);
			if (periodo != null){
				switch (periodo){
					case NENHUM : {
						tipoRepeticao.setSelection(0);
						tipoRepeticao.setVisibility(View.GONE);
						semanaGrupo1.setVisibility(View.GONE);
						semanaGrupo2.setVisibility(View.GONE);
						semanaGrupo3.setVisibility(View.GONE);
						semanaGrupo4.setVisibility(View.GONE);
						vencimentoGrupoLabel.setVisibility(View.GONE);
						vencimentoGrupo.setVisibility(View.GONE);
						dataVencimento.setText("");
//						renovarAutomatico.setVisibility(View.GONE);
					}
					break;
					case DUAS_SEMANAS :{
						tipoRepeticao.setSelection(0);
						tipoRepeticao.setVisibility(View.GONE);
						semanaGrupo1.setVisibility(View.GONE);
						semanaGrupo2.setVisibility(View.GONE);
						semanaGrupo3.setVisibility(View.GONE);
						semanaGrupo4.setVisibility(View.GONE);
						vencimentoGrupoLabel.setVisibility(View.GONE);
						vencimentoGrupo.setVisibility(View.GONE);
						dataVencimento.setText("");
//						renovarAutomatico.setVisibility(View.VISIBLE);
						
					}
					break;
					case POR_MES : 
					case BIMESTRAL :
					case TRIMESTRAL :
					case SEMESTRAL :
					case ANUAL : {
						tipoRepeticao.setVisibility(View.VISIBLE);
						semanaGrupo1.setVisibility(View.GONE);
						semanaGrupo2.setVisibility(View.GONE);
						semanaGrupo3.setVisibility(View.GONE);
						semanaGrupo4.setVisibility(View.GONE);
//						renovarAutomatico.setVisibility(View.VISIBLE);
					}
					break;
					case POR_DIA : {
						vencimentoGrupoLabel.setVisibility(View.GONE);
						vencimentoGrupo.setVisibility(View.GONE);
						dataVencimento.setText("");
						tipoRepeticao.setSelection(0);
						tipoRepeticao.setVisibility(View.GONE);
						semanaGrupo1.setVisibility(View.VISIBLE);
						semanaGrupo2.setVisibility(View.VISIBLE);
						semanaGrupo3.setVisibility(View.VISIBLE);
						semanaGrupo4.setVisibility(View.VISIBLE);
//						renovarAutomatico.setVisibility(View.VISIBLE);
					}
					break;
				default:
					break;
				}
			}
		}

		@Override
		public void onNothingSelected(AdapterView<?> arg0) {
		}
	  };

	  
	  AdapterView.OnItemSelectedListener tipoRepeticaoClick = new AdapterView.OnItemSelectedListener() {
		  @Override
		  public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
			  NotificacaoMensal notifMensal = (NotificacaoMensal) parent.getItemAtPosition(pos);
			  if (notifMensal != null){
				  switch (notifMensal){
				  case VALIDADE :{
					  vencimentoGrupoLabel.setVisibility(View.GONE);
					  vencimentoGrupo.setVisibility(View.GONE);
					  dataVencimento.setText("");
				  }
				  break;

				  case CONCLUSAO :{
					  vencimentoGrupoLabel.setVisibility(View.GONE);
					  vencimentoGrupo.setVisibility(View.GONE);
					  dataVencimento.setText("");
				  }
				  break;

				  case VENCIMENTO :{
					  vencimentoGrupoLabel.setVisibility(View.VISIBLE);
					  vencimentoGrupo.setVisibility(View.VISIBLE);
				  }
				  break;
				  default:
					  break;
				  }
			  }
		  }
		  
		  @Override
		  public void onNothingSelected(AdapterView<?> arg0) {
		  }
	  };

	@Override
	public void prepareToUpdate() {
		this.prepareToPersist();
	}
}